package com.atguigu.gmall.product.controller;

import com.atguigu.gmall.common.result.Result;
import io.minio.BucketExistsArgs;
import io.minio.MakeBucketArgs;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.UUID;

@RestController
@RequestMapping("/admin/product")
//注解的意思是热部署   就是nacos配置文件修改  不用重启服务
@RefreshScope
public class FileUploadController {
    //对象存储服务的URL
    @Value("${minio.endpointUrl}")
    private String endpointUrl;
    //Access key就像用户ID，可以唯一标识你的账户。
    @Value("${minio.accessKey}")
    private String accessKey;
    //Secret key是你账户的密码。
    @Value("${minio.secreKey}")
    private String secreKey;
    //那个存储空间
    @Value("${minio.bucketName}")
    private String bucketName;

    // /admin/product/fileUpload
    @PostMapping("/fileUpload")
    public Result fileUpload(MultipartFile file)throws Exception{
        // 声明一个url 变量接收上传之后的路径
        String url="";
//  MinioClient minioClient =
//    MinioClient.builder()
//        .endpoint("https://play.min.io")
//        .credentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG")
//        .build();
        MinioClient minioClient= MinioClient.builder().endpoint(endpointUrl).credentials(accessKey,secreKey).build();
        //检查存储桶是否已经存在
        boolean isExist = minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build());
        //判断桶是否存在
        if (isExist){
            System.out.println("Bucket already exists");
        }else {
            //创建一个名为asiatrip的存储桶，用于存储照片的zip文件
            minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
        }
        //使用putObject上传一个文件到存储桶中
        //准备一个文件的名称
        String fileName = System.currentTimeMillis() + UUID.randomUUID().toString();
        minioClient.putObject(
                PutObjectArgs.builder().bucket(bucketName).object(fileName).stream(file.getInputStream(),file.getSize(),-1)
                        .contentType(file.getContentType())
                        .build()
        );
        //  http://47.93.148.192:9000/gmall/xxx
        url = endpointUrl+"/"+bucketName+"/"+fileName;
        System.out.println("url:\t"+url);

        //需要将图片上传之后的地址返回
        return Result.ok(url);
    }
}
